"""
系统设置页面

系统配置和设置的页面
"""

import tkinter as tk
from tkinter import ttk, messagebox
from pathlib import Path
import sys

# 添加项目根目录到路径
project_root = Path(__file__).parent.parent.parent.parent
sys.path.insert(0, str(project_root))

from src.gui.main_app import BasePage


class SettingsPage(BasePage):
    """系统设置页面"""
    
    def create_page(self):
        """创建页面内容"""
        self.frame = ttk.Frame(self.parent)
        
        # 页面标题
        header_frame = ttk.Frame(self.frame)
        header_frame.pack(fill="x", pady=(0, 20))
        
        title_label = ttk.Label(
            header_frame,
            text="⚙️ 系统设置",
            style='Title.TLabel'
        )
        title_label.pack(side="left")
        
        # 设置选项卡
        notebook = ttk.Notebook(self.frame)
        notebook.pack(fill="both", expand=True)
        
        # 创建各个设置页面
        self.create_general_settings(notebook)
        self.create_storage_settings(notebook)
        self.create_ai_settings(notebook)
        self.create_about_page(notebook)
    
    def create_general_settings(self, notebook):
        """创建常规设置页面"""
        general_frame = ttk.Frame(notebook, padding="20")
        notebook.add(general_frame, text="常规设置")
        
        # 界面设置
        ui_frame = ttk.LabelFrame(general_frame, text="界面设置", padding="15")
        ui_frame.pack(fill="x", pady=(0, 20))
        
        # 主题选择
        theme_frame = ttk.Frame(ui_frame)
        theme_frame.pack(fill="x", pady=(0, 10))
        
        ttk.Label(theme_frame, text="界面主题:").pack(side="left")
        theme_var = tk.StringVar(value="默认")
        theme_combo = ttk.Combobox(
            theme_frame,
            textvariable=theme_var,
            values=["默认", "深色", "浅色"],
            state="readonly",
            width=15
        )
        theme_combo.pack(side="left", padx=(10, 0))
        
        # 语言设置
        lang_frame = ttk.Frame(ui_frame)
        lang_frame.pack(fill="x", pady=(0, 10))
        
        ttk.Label(lang_frame, text="界面语言:").pack(side="left")
        lang_var = tk.StringVar(value="中文")
        lang_combo = ttk.Combobox(
            lang_frame,
            textvariable=lang_var,
            values=["中文", "English"],
            state="readonly",
            width=15
        )
        lang_combo.pack(side="left", padx=(10, 0))
        
        # 自动保存
        auto_save_var = tk.BooleanVar(value=True)
        auto_save_check = ttk.Checkbutton(
            ui_frame,
            text="启用自动保存",
            variable=auto_save_var
        )
        auto_save_check.pack(anchor="w", pady=(0, 10))
    
    def create_storage_settings(self, notebook):
        """创建存储设置页面"""
        storage_frame = ttk.Frame(notebook, padding="20")
        notebook.add(storage_frame, text="存储设置")
        
        # 存储路径设置
        path_frame = ttk.LabelFrame(storage_frame, text="存储路径", padding="15")
        path_frame.pack(fill="x", pady=(0, 20))
        
        # 素材存储路径
        material_frame = ttk.Frame(path_frame)
        material_frame.pack(fill="x", pady=(0, 10))
        
        ttk.Label(material_frame, text="素材存储路径:").pack(anchor="w")
        path_entry = ttk.Entry(material_frame, width=50)
        path_entry.pack(side="left", fill="x", expand=True, padx=(0, 10))
        path_entry.insert(0, "/home/user/materials")
        
        ttk.Button(material_frame, text="浏览", command=self.browse_path).pack(side="right")
        
        # 缓存设置
        cache_frame = ttk.LabelFrame(storage_frame, text="缓存设置", padding="15")
        cache_frame.pack(fill="x", pady=(0, 20))
        
        cache_size_frame = ttk.Frame(cache_frame)
        cache_size_frame.pack(fill="x", pady=(0, 10))
        
        ttk.Label(cache_size_frame, text="缓存大小限制:").pack(side="left")
        cache_var = tk.StringVar(value="1024")
        cache_entry = ttk.Entry(cache_size_frame, textvariable=cache_var, width=10)
        cache_entry.pack(side="left", padx=(10, 5))
        ttk.Label(cache_size_frame, text="MB").pack(side="left")
        
        ttk.Button(cache_frame, text="清理缓存", command=self.clear_cache).pack(anchor="w", pady=(10, 0))
    
    def create_ai_settings(self, notebook):
        """创建AI设置页面"""
        ai_frame = ttk.Frame(notebook, padding="20")
        notebook.add(ai_frame, text="AI设置")
        
        # AI服务设置
        service_frame = ttk.LabelFrame(ai_frame, text="AI服务配置", padding="15")
        service_frame.pack(fill="x", pady=(0, 20))
        
        # API密钥
        api_frame = ttk.Frame(service_frame)
        api_frame.pack(fill="x", pady=(0, 10))
        
        ttk.Label(api_frame, text="Gemini API密钥:").pack(anchor="w")
        api_entry = ttk.Entry(api_frame, width=50, show="*")
        api_entry.pack(fill="x", pady=(5, 0))
        
        # 模型选择
        model_frame = ttk.Frame(service_frame)
        model_frame.pack(fill="x", pady=(10, 0))
        
        ttk.Label(model_frame, text="默认模型:").pack(side="left")
        model_var = tk.StringVar(value="gemini-1.5-flash")
        model_combo = ttk.Combobox(
            model_frame,
            textvariable=model_var,
            values=["gemini-1.5-flash", "gemini-1.5-pro"],
            state="readonly",
            width=20
        )
        model_combo.pack(side="left", padx=(10, 0))
        
        # 分类设置
        category_frame = ttk.LabelFrame(ai_frame, text="分类设置", padding="15")
        category_frame.pack(fill="x", pady=(0, 20))
        
        # 自动分类
        auto_classify_var = tk.BooleanVar(value=True)
        auto_classify_check = ttk.Checkbutton(
            category_frame,
            text="启用自动分类",
            variable=auto_classify_var
        )
        auto_classify_check.pack(anchor="w", pady=(0, 10))
        
        # 置信度阈值
        confidence_frame = ttk.Frame(category_frame)
        confidence_frame.pack(fill="x")
        
        ttk.Label(confidence_frame, text="分类置信度阈值:").pack(side="left")
        confidence_var = tk.DoubleVar(value=0.8)
        confidence_scale = ttk.Scale(
            confidence_frame,
            from_=0.0,
            to=1.0,
            variable=confidence_var,
            orient="horizontal",
            length=200
        )
        confidence_scale.pack(side="left", padx=(10, 10))
        
        confidence_label = ttk.Label(confidence_frame, text="0.8")
        confidence_label.pack(side="left")
        
        # 更新标签值
        def update_confidence_label(value):
            confidence_label.config(text=f"{float(value):.1f}")
        
        confidence_scale.config(command=update_confidence_label)
    
    def create_about_page(self, notebook):
        """创建关于页面"""
        about_frame = ttk.Frame(notebook, padding="20")
        notebook.add(about_frame, text="关于")
        
        # 应用信息
        info_frame = ttk.Frame(about_frame)
        info_frame.pack(expand=True)
        
        # 应用图标和名称
        title_label = ttk.Label(
            info_frame,
            text="🎬 短视频混剪工具",
            font=('Arial', 20, 'bold')
        )
        title_label.pack(pady=(50, 20))
        
        version_label = ttk.Label(
            info_frame,
            text="版本 1.0.0",
            font=('Arial', 12)
        )
        version_label.pack(pady=(0, 20))
        
        description_text = """
        基于Python和Tkinter开发的现代化短视频混剪工具
        
        主要功能：
        • 素材上传和管理
        • AI智能分类
        • 模板库管理
        • 成品制作和导出
        • 数据统计分析
        
        技术栈：
        • Python 3.12+
        • Tkinter GUI
        • SQLAlchemy ORM
        • Gemini AI API
        """
        
        description_label = ttk.Label(
            info_frame,
            text=description_text,
            justify="center",
            font=('Arial', 10)
        )
        description_label.pack(pady=(0, 30))
        
        # 按钮
        button_frame = ttk.Frame(info_frame)
        button_frame.pack()
        
        ttk.Button(
            button_frame,
            text="检查更新",
            command=self.check_updates
        ).pack(side="left", padx=(0, 10))
        
        ttk.Button(
            button_frame,
            text="技术支持",
            command=self.show_support
        ).pack(side="left")
    
    def browse_path(self):
        """浏览路径"""
        from tkinter import filedialog
        path = filedialog.askdirectory(title="选择存储路径")
        if path:
            messagebox.showinfo("提示", f"已选择路径: {path}")
    
    def clear_cache(self):
        """清理缓存"""
        if messagebox.askyesno("确认", "确定要清理所有缓存吗？"):
            messagebox.showinfo("成功", "缓存清理完成")
    
    def check_updates(self):
        """检查更新"""
        messagebox.showinfo("检查更新", "当前已是最新版本")
    
    def show_support(self):
        """显示技术支持"""
        messagebox.showinfo("技术支持", "如需技术支持，请联系：\nsupport@mixvideo.com")
